package com.example.demo.study.objectpolymorphic;

public class AnimalTest {
    public static void main(String[] args) {
        // 多态
        // 向上转型  Animal a = new Dog();
        // 向下转型  Dog d = (Dog)a;  把动物类，强制转换为狗类
        useAnimal(new Dog());
        useAnimal(new Cat());
        useAnimal(new Pig());
    }
    public static void useAnimal(Animal a){  //Animal a = new Dog();
        // 这只能调用--- 覆盖重写
        // 子类 -- 自己的方法，调用不了
        // a.eat();

        if(a instanceof Dog){
            System.out.println(a instanceof Dog);
            a.eat();
            // 向下转型  Dog d = (Dog)a;  把动物类，强制转换为狗类
            ((Dog)a).lookHome();
        }
        if(a instanceof Cat){
            a.eat();
            Cat c = (Cat)a;
            c.catchMouse();
        }
        if(a instanceof Pig){
            a.eat();
            Pig p = (Pig)a;
            p.sleep();
        }
     }
    // 方法重写 overWrite -- 名字相同 参数类型相同
//    public static void useAnimal(Dog d){
//        d.eat();
//        d.lookHome();   }
//    public static void useAnimal(Cat cat){
//        cat.eat();
//        cat.catchMouse();
//    }
//    public static void useAnimal(Pig pig){
//        pig.eat();
//        pig.sleep();
//    }
}
